package  
{
	import flash.display.*;
	import flash.geom.*;
	
	/**
	 * Verlet 积分使用点
	 * @author StefanieKaka
	 */
	public class VerletPoint
	{
		/// 构造函数
		public function VerletPoint(x : Number, y : Number) 
		{
			setPosition(x, y);
		}
		
///////////////////////////////////////////////////////////////////////////////////////////////////
// 公共域
///////////////////////////////////////////////////////////////////////////////////////////////////
		
		/**
		 * 更新
		 */
		public function update() : void
		{
			var tempX : Number = m_x;
			var tempY : Number = m_y;
			m_x += vx;
			m_y += vy;
			m_oldX = tempX;
			m_oldY = tempY;
		}

		/**
		 * 设置位置, 没有位置的改变
		 */
		public function setPosition(x : Number, y : Number) : void
		{
			m_x = m_oldX = x;
			m_y = m_oldY = y;
		}
		
		/**
		 * 确保点不会移动到 rect 对象的外部
		 */
		public function constrain(rect : Rectangle) : void
		{
			m_x = Math.max(rect.left, Math.min(rect.right, m_x));
			m_y = Math.max(rect.top, Math.min(rect.bottom, m_y));
		}
		
		/**
		 * x 速度
		 */
		public function set vx(value : Number) : void
		{
			m_oldX = m_x - value;
		}
		
		public function get vx() : Number
		{
			return m_x - m_oldX;
		}
		
		/**
		 * y 速度
		 */
		public function set vy(value : Number) : void
		{
			m_oldY = m_y - value;
		}
		
		public function get vy() : Number
		{
			return m_y - m_oldY;
		}
		
		/// 渲染
		public function render(g : Graphics) : void
		{
			g.beginFill(0);
			g.drawCircle(m_x, m_y, 4);
			g.endFill();
		}

		/**
		 * x 坐标
		 */
		public function set x(value : Number) : void
		{
			m_x = value;
		}
		
		public function get x() : Number
		{
			return m_x;
		}
		
		/**
		 * y 坐标
		 */
		public function set y(value : Number) : void
		{
			m_y = value;
		}
		
		public function get y() : Number
		{
			return m_y;
		}
		
///////////////////////////////////////////////////////////////////////////////////////////////////
// 私有域
///////////////////////////////////////////////////////////////////////////////////////////////////
		
		private var m_x : Number = 0;
		private var m_y : Number = 0;
		private var m_oldX : Number = 0;
		private var m_oldY : Number = 0;
		
	}

}